// ajax({
//     method: 'get',
//     url: 'http://www.example.com',
//     data: {
//         name: "admin",
//         sex: "f",
//         age: 10
//     },
//     success: function (data) {
//     	console.log(data);
// 	},
//     error: function(error){
//         console.log(error);
//     }
// })

// opt是传入一个对象
function ajax(opt){
    console.log("----------")
    // 默认配置信息
    // 默认对象
    var _default = {
        method: "get",
        headers:{
            "Content-Type": "application/x-www-form-urlencoded"
        },
        data: {},

        success: function(data,xhr){},
        error: function(err){}

    };



    // 合并使用者的配置选项与默认选项
    // 对象的合并

    // 写法1
    // __default = {...__default,opt};

    // 写法2
    Object.assign(_default,opt);

    var xhr = new XMLHttpRequest();


    // 对象装换成  查询字符串
    // {a:1,b:1} => a=1&b=2

    // 默认对象中有data: {},
    var tmp = [];
    for (var key in _default.data){
        tmp.push(key + "=" + _default.data[key]);
    }

    var qs = tmp.join("&");


    // 判断请求方式
    // GET的封装
    if(_default.method.toUpperCase() === "GET"){
        console.log("2222222222");
        _default.url = qs ? _default.url + "?" + qs  : _default.url;
        xhr.open("GET",_default.url);

        xhr.send();  

    }

    // POST的封装
    if(_default.method.toUpperCase() === "POST"){
        // 设置访问的url请求方式
        xhr.open("POST",_default.url);

        // 请求头
        for(var key in _default.headers){
            xhr.setRequestHeader(key,_default.headers[key]);
        }

        // 发送数据  form-urlencoded qs     //  application/json   json字符串
        // headers中午
        if(_default.headers["Content-Type"].includes("application/json")){
            xhr.send(JSON.stringify(_default.data));
        }else{
            xhr.send(qs);
        }
    }


    return new Promise((resolve,reject) =>{
        xhr.onload = function(){
            console.log("1111111111")
            //  针对状态码 判断一下 请求是成功还是失败
            // startsWith（）查看某个字符串是否以某个字符开头
            if(
                xhr.status.toString().startsWith("4") || 
                xhr.status.toString().startsWith("5"))
                {
                    console.log("ccccccc");
                    reject(xhr);
                    return _default.error(xhr);
                } 
    
            var result = xhr.responseText;
         
            // 检查一下响应的头部 发现响应 是application/json类型的，做数据转化
            if(xhr.getResponseHeader("content-type").includes("application/json")){
                console.log("结果",result);
                result = JSON.parse(result);
                // console.log("结果",result);
            }
            resolve(result);
            return  _default.success(result);
        }
    
    
        // 网络异常
        xhr.onerror = function(){
            reject(xhr);
            _default.error(xhr);
        }

    })

}

